<?php
/**
 * рисуем select
 * {select name='selectName' attributes='id="sel_1"' value='["one","two"]' id=1 key_as_value=1}
 * {select name='selectName' attributes='id="sel_1"' value='{"one":"form","two":"element}' id="two"}
 *
 * @param array $params
 * @param object $smarty
 */
function smarty_function_select($params, &$smarty)
{
	$data="<select name='".$params['name']."'".(isset($params['arrtibutes'])?$params['attributes']:'').">";
	if(isset($params['value']) && $params['value']){
	    $param=$params['value'];
	    //преобразовываем в обект если передана строка
	    if(is_string($param))$param=Core::json($param);
	    if(!Core::lastError()){
	        $list=array();
	        private_select_recurse($params, $param, $list, 0);
	        $data.=implode('',$list);
	    }
	}
	$data.='</select>';
	if(isset($params['assign'])){
	   $smarty->assign($params['assign'], $data);
	}else{
	    echo $data;
	}
}
function private_select_recurse($params, $param, &$list, $level)
{
    $current=isset($params['id'])?$params['id']:false;
    //ключ указывающий на то что ключи будут такие же как и значения
	$key_as_value=isset($params['key_as_value']);
	//отступы
	$n="";
	for($m=0;$m<$level;$m++)$n.='-';
    foreach ($param as $key=>$item) {
        if(isset($params['title']))$text=$item[$params['title']];
        else $text=$item;
        if($key_as_value)$key=$text;
    	$list[]="<option value='".$key."'".($key==$current?" selected='selected'":'').">".$n.$text.'</option>';
    	if(is_array($item) && $item['child'])private_select_recurse($params, $item['child'], $list, $level+1);
    }
}
?>